Sponsored by Deepsite.site

Church Website Editor

Created By
Elijah Desenta month ago
The Custom Website Editor lets a pastor manage and update their church's professionally-built website using plain English — no code, no logins, no technical knowledge required. It connects directly to the live website's GitHub repository, so any change you describe is made for you and ships to the real, public site within about 30 seconds. Editing your site. Ask for any wording change — fix a typo, reword a welcome message, update a service time, swap a heading, add a paragraph or a whole new section — and it finds the right page, makes the exact edit, and publishes it. It can read any page before changing it, search your site's content for a phrase you remember ("Sunday morning," "What to Expect," a pastor's name), browse your pages and files, and even create brand-new pages. Every change is saved with a clear, human-readable note so you always know what was done. Photos and videos. Send a photo and it adds it to your site; send a video or a large image and it's hosted on fast permanent storage and dropped onto the page you want. It can list the images already on your site so the right photo always shows up — no broken pictures. Undo and history. Ask "what did I change today?" and it shows your recent updates in plain language. Say "undo that" or "go back" and it safely rolls the live site back to how it was — nothing is ever lost. Knowing it worked. After any change it can confirm the site rebuilt successfully, and if something ever breaks the build, it explains what went wrong in plain English and fixes it — you never see raw errors. Your own domain. Bought a domain like yourchurch.org? It connects that domain to your site and gives you the exact, simple settings to enter at your domain registrar, including a warning if the change could affect email on that domain. Hosting, chat, analytics, and more. It can start your monthly hosting subscription, set up a live website chat widget so visitors can message you, and report how your site is doing — total traffic, your most-viewed pages, where visitors are coming from, and day-by-day trends. It can also score any church website against the Church Website Score rubric to show where it stands.
Overview
Pastor EliMCP reference

Developer reference

Church Website Editor MCP server

A Model Context Protocol server that lets an AI assistant edit a church's website by operating directly on its GitHub repository. Writes commit to the default branch and auto-deploy to production via Vercel in about 30 seconds. 25tools, GitHub-OAuth scoped to the caller's own repositories.

Looking for the plain-English version? See the pastor's guide.

Connection

Endpoint
https://www.elijahdesent.com/api/mcp
Transport
Streamable HTTP (stateless)
Server
elijahdesent-crm v0.10.0
Auth
OAuth 2.1 — identity via GitHub
Authorization metadata
/.well-known/oauth-authorization-server
Protected-resource metadata
/.well-known/oauth-protected-resource

The endpoint advertises OAuth 2.1 with dynamic client registration; the discovery documents above let a compliant MCP client negotiate the flow automatically. Tokens are bound to the GitHub account that has access to the church's repository, so every call is scoped to repos the caller already owns.

Add as a remote connector

{

"mcpServers": { "church-website-editor": { "url": "https://www.elijahdesent.com/api/mcp" } } }

Most clients (Claude, ChatGPT developer mode, Perplexity) add it through their connector UI instead — see the setup walkthrough. On first connect, the client opens a GitHub sign-in to authorize.

Conventions

  • repo accepts a bare name— the server fills in the caller's GitHub owner. Use owner/name only for another org.
  • Every successful write is one commit to the default branch. Vercel auto-deploys on push; no separate deploy step.
  • Prefer replace_in_file for edits. edit_file replaces the whole file and is guarded against partial-content wipes (allow_shrink to override).
  • read tools never mutate; commit tools push to the repo; status tools report state only.

Tools

Connection & discovery

Establish identity and find the repos and sites the caller can touch.

connection_statusstatus

Confirm the caller is authenticated and the GitHub link is live. Use to diagnose auth failures.

No parameters.

Returns Authenticated user, GitHub link state, and the church site(s) wired to the account.

list_my_sitesstatus

List the church(es) linked to the caller in the CRM, with their live domains.

No parameters.

Returns Array of { church, domain }.

list_reposread

List GitHub repositories the caller can access. Owner-scoped by default.

ParamTypeDescription
filterstringSubstring to filter repo names (e.g. 'baptist').

Returns Array of { name, description, default_branch, private }.

search_reposread

Find a repo by matching across both its name AND description. Broader than list_repos (name-only) — use when you know what a site is about but not its exact repo name.

ParamTypeDescription
queryreqstringText to match against repo name or description (e.g. 'baptist', a town, a pastor's name).
limitintegerHow many matches to return, 1–50. Default 20.

Returns Matching repos, newest first, each with description, visibility, and last-updated.

get_repo_inforead

Report a repo's framework versions so edits match its conventions. Call before any non-trivial code edit.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.

Returns Next.js / React / Tailwind versions, TypeScript usage, and router (app vs pages).

Reading content

Navigate the tree, read files, search, and inventory live images. All read-only.

list_pagesread

List the contents of a directory. Empty path lists the repo root.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
pathstringDirectory path; empty string for repo root (default).
refstringBranch, tag, or SHA. Defaults to the repo's default branch.

Returns Array of { name, type: 'file' | 'dir' }.

read_fileread

Read the full UTF-8 contents of a file. Always read before editing.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
pathreqstringFile path within the repo.
refstringBranch, tag, or SHA. Defaults to the repo's default branch.

Returns Full file contents.

search_contentread

Recursive content search (fetches the tree and greps each text file) — works on fresh, unindexed repos.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
queryreqstringCase-insensitive text to find.
refstringBranch, tag, or SHA. Defaults to the repo's default branch.
path_prefixstringOnly search paths starting with this (e.g. 'src/app/').

Returns Up to 30 matching files, each with matching line numbers.

list_photosread

Inventory image files with their exact live URLs. Call before pointing a page at a photo to avoid broken-image typos.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
folderstringFolder to list from. Defaults to 'public' (site-served images).
refstringBranch, tag, or SHA. Defaults to the repo's default branch.

Returns Array of images with repo path and live URL.

Writing content

Each successful write is one commit to the default branch, which auto-deploys to production via Vercel (30s).

replace_in_filecommit

Targeted edit — replace exact text. Preferred for small changes; only touches what you specify.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
pathreqstringFile path within the repo.
old_stringreqstringExact text to find, whitespace included. Add context to make it unique.
new_stringreqstringReplacement text.
messagereqstringPlain-English commit message.
branchstringBranch to commit to. Defaults to default branch.
replace_allbooleanReplace every occurrence. Default false (must match exactly once).

Returns Commit confirmation.

edit_filecommit

Create a new file or replace a file's FULL contents. Has a shrink guard against partial-content wipes.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
pathreqstringFile path within the repo.
contentreqstringFull new file contents (UTF-8).
messagereqstringPlain-English commit message.
branchstringBranch to commit to. Defaults to default branch.
allow_shrinkbooleanOverride the guard that rejects writes dropping >20 lines AND <60% of prior size.

Returns Commit confirmation, or a rejection if the shrink guard trips.

upload_photocommit

Add a photo/video. Called without data, returns a one-time upload link; small images commit to the repo, videos & large files route to hosted storage automatically.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
pathreqstringSave location. Use 'public/<name>.<ext>' for site-served images.
messagereqstringPlain-English commit message.
datastringAdvanced — base64 image bytes. Omit to get an upload link instead.
branchstringBranch to commit to. Defaults to default branch.

Returns A one-time upload link (default), or a commit confirmation when data is supplied.

get_uploaded_photo_urlread

Resolve where an upload landed after the user has used the link from upload_photo.

ParamTypeDescription
tokenreqstringThe upload link (https://.../u/<token>) or the bare token.

Returns HOSTED (permanent storage URL), COMMITTED (live repo path), or PENDING (not uploaded yet).

History & undo

Inspect commits and roll changes back non-destructively.

list_recent_changesread

List recent commits, newest first.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
pathstringLimit to commits touching this file/directory.
limitintegerHow many to return, 1–50. Default 15.

Returns Array of { short SHA, time, author, message }.

show_changeread

Get the message, touched files, and diff for one commit.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
shareqstringCommit SHA (full or short).

Returns Per-file patch with added/removed lines.

revert_changecommit

Undo a commit by creating a new commit that restores the prior state. Original commit stays in history.

ParamTypeDescription
reporeqstringRepo as 'owner/name', or bare 'name' to use the caller's GitHub owner.
shareqstringCommit SHA to revert.
branchstringBranch to apply the revert on. Defaults to default branch.

Returns Revert commit confirmation.

Deployment

Confirm edits reached production.

check_deploy_statusstatus

Check whether recent edits deployed. Auto-discovers the caller's site(s) from GitHub access.

ParamTypeDescription
repostringNarrow to one repo. Omit to check all of the caller's sites.

Returns Deploy state per site; on failure, the last lines of build output.

Custom domains

Attach a custom domain to a site on Vercel and confirm it's pointing correctly. Scoped to projects linked to repos the caller can access. The pastor changes their nameservers at their registrar; the tools never touch the registrar directly.

connect_domainvercel

Attach a custom domain to the caller's Vercel project and return plain-English instructions to point the domain's nameservers at Vercel (with an A/CNAME alternative for domains that host email). A bare apex auto-pairs its 'www.'. Goes live once nameservers propagate.

ParamTypeDescription
domainreqstringDomain to connect, e.g. 'gracebaptist.org' or 'www.gracebaptist.org'.
repostringWhich site, as 'owner/name' or 'name'. Needed only if the caller has multiple sites.

Returns Confirmation plus the Vercel nameservers to set at the registrar (from the Vercel API, e.g. ns1/ns2.vercel-dns.com), and an A/CNAME fallback.

check_domainstatus

Check whether a connected domain's nameservers point at Vercel and the site is verified and live. When fully live and the caller owns exactly one church, records it as that church's live_domain so analytics attribute traffic.

ParamTypeDescription
domainreqstringDomain to check, e.g. 'gracebaptist.org'.
repostringWhich site, as 'owner/name' or 'name'. Needed only if the caller has multiple sites.

Returns Nameserver status (current vs. expected) + site verification state; when live, confirmation it's been linked for analytics.

redirect_domainvercel

Change where a connected domain points: redirect it to another domain (e.g. an old domain or the non-www version → the main site), or pass redirect_to 'none' to serve directly. Can't chain — the target must not itself be a redirect.

ParamTypeDescription
domainreqstringThe connected domain to change, e.g. 'www.gracebaptist.org'.
redirect_tostringDomain to send visitors to, e.g. 'gracebaptist.org'. Use 'none' (or omit) to turn the redirect off.
permanentbooleanPermanent (308) by default; false for a temporary 307.
repostringWhich site, as 'owner/name' or 'name'. Needed only if the caller has multiple sites.

Returns Confirmation of the new redirect (or that the domain now serves directly). Reports the chaining error if the target is itself a redirect.

Analytics

Read-only traffic data, auto-scoped to the caller's own sites. Pass church to disambiguate when they own more than one.

analytics_summaryread

High-level traffic over a recent window.

ParamTypeDescription
churchstringChurch name or live domain.
daysintegerWindow in days, 1–90. Default 28.

Returns Total pageviews, unique visitors (devices), country & device breakdown.

top_pagesread

Most-viewed pages over a recent window.

ParamTypeDescription
churchstringChurch name or live domain.
daysintegerWindow in days, 1–90. Default 28.
limitintegerHow many pages, 1–50. Default 10.

Returns Ranked pages with view counts.

top_referrersread

Top external referrers (direct traffic excluded).

ParamTypeDescription
churchstringChurch name or live domain.
daysintegerWindow in days, 1–90. Default 28.
limitintegerHow many referrers, 1–50.

Returns Ranked referrers with counts.

traffic_by_dayread

Daily pageviews trend for spotting spikes and quiet weeks.

ParamTypeDescription
churchstringChurch name or live domain.
daysintegerWindow in days, 1–90. Default 14.

Returns Pageviews per day.

Scoring

Audit any church website against the Church Website Score rubric.

score_websiteread

Fetch a site's homepage and key subpages and return the grading rubric plus page content. The caller (the model) does the scoring — the tool calls no AI itself.

ParamTypeDescription
urlreqstringThe site to score, e.g. 'gracebaptist.org'.

Returns The full 6-category / 100-point rubric and the fetched page content.

Built and maintained by Pastor Eli (Elijah Desent) · Pastor@elijahdesent.com

m.css?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","style"]\n:HL["/next/static/media/5e5dfa9e86f764b8-s.p.0o9~3wzuvo.a.woff2?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","font",{"crossOrigin":"","type":"font/woff2"}]\n:HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","font",{"crossOrigin":"","type":"font/woff2"}]\n:HL["/_next/static/media/8c2eb9ceedecfc8e-s.p.0oeo8epbafgia.woff2?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","font",{"crossOrigin":"","type":"font/woff2"}]\n2:T6ff,"]) Desent Web Design","url":"https://www.elijahdesent.com/","description":"Custom church website design and development by Pastor Eli, helping churches launch beautiful, trustworthy websites with online giving, chat, streaming, hosting, SSL, email, and deployment support.","founder":{"@id":"https://www.elijahdesent.com/#person"},"telephone":"+1-401-486-6714","email":"elimark1611@gmail.com","areaServed":{"@type":"Country","name":"United States"},"serviceType":["Church Website Design","Church Website Development","Church Web Hosting","Church Giving Integration","Church Live Stream Integration","Church Visitor Plan Page Design"],"knowsAbout":["Church websites","Pastoral ministry","Church communications","Online giving","YouTube live streaming","Visitor conversion","Mobile-first web design","Vercel hosting"]},{"@type":"Person","@id":"https://www.elijahdesent.com/#person","name":"Elijah Desent","alternateName":"Pastor Eli","url":"https://www.elijahdesent.com/","image":"https://www.elijahdesent.com/pastor-eli.jpg","jobTitle":"Pastor and Web Designer","worksFor":{"@id":"https://www.elijahdesent.com/#business"},"affiliation":{"@type":"Organization","name":"Westview Baptist Church","address":{"@type":"PostalAddress","addressLocality":"Warren","addressRegion":"MI","addressCountry":"US"}},"knowsAbout":["Church website design","Church ministry","Visitor-focused church communication","Online giving integration","Church live streaming"]},{"@type":"WebSite","@id":"https://www.elijahdesent.com/#website","url":"https://www.elijahdesent.com/","name":"Elijah Desent","publisher":{"@id":"https://www.elijahdesent.com/#business"},"inLanguage":"en-US"}]}"])",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0pn7x416-kez3.css?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/0_1iovxvun9m.css?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0hvii4w7_7xs..js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0r3-hxbdqblcx.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"inter_786c1081-module__J60SBq__variable lora_ce9c8259-module__O4kSOa__variable h-full antialiased","children":["$","body",null,{"className":"min-h-full flex flex-col bg-background text-foreground","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"$2"}}],["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","div",null,{"className":"flex min-h-screen flex-col items-center justify-center px-6 py-24 text-center selection:bg-[#0a1e3f] selection:text-[#c9a961]","style":{"background":"#faf8f1","color":"#0a1e3f"},"children":[["$","span",null,{"className":"inline-flex items-center gap-3 text-[11px] font-medium tracking-[0.24em] uppercase","style":{"color":"#c9a961"},"children":[["$","span",null,{"className":"h-px w-8","style":{"background":"#c9a961"},"aria-hidden":true}],"Page not found",["$","span",null,{"className":"h-px w-8","style":{"background":"#c9a961"},"aria-hidden":true}]]}],["$","p",null,{"className":"mt-10 font-serif text-[88px] leading-none tracking-tight tabular-nums sm:text-[120px]","style":{"color":"#0a1e3f"},"children":["4","$L5","4"]}],"$L6","$L7","$L8"]}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],"$L9","$La","$Lb","$Lc","$Ld"]}]}]]}],{"children":["$Le",{"children":["$Lf",{},null,false,null]},null,false,"$@10"]},null,false,null],"$L11",false]],"m":"$undefined","G":["$12",["$L13","$L14"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined"}\n"])2cwgch.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR"],""]\n16:I[505014,["/_next/static/chunks/0hvii4w7_7xs..js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","/_next/static/chunks/0r3-hxbdqblcx.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","/_next/static/chunks/16_6vf2cwgch.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR"],"default"]\n17:I[713354,["/_next/static/chunks/0hvii4w7_7xs..js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","/_next/static/chunks/0r3-hxbdqblcx.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR"],"Toaster"]\n18:I[262298,["/_next/static/chunks/0hvii4w7_7xs..js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","/_next/static/chunks/0r3-hxbdqblcx.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR"],"default"]\n19:I[197287,["/_next/static/chunks/0hvii4w7_7xs..js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","/_next/static/chunks/0r3-hxbdqblcx.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR"],"default"]\n1a:I[940699,["/_next/static/chunks/0hvii4w7_7xs..js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","/_next/static/chunks/0r3-hxbdqblcx.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR"],"default"]\n1b:I[35029,["/_next/static/chunks/0hvii4w7_7xs..js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","/_next/static/chunks/0r3-hxbdqblcx.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR"],"GoogleAds"]\n27:I[897367,["/_next/static/chunks/0x.73w57rn4ou.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","/_next/static/chunks/0i.l9589uvx0j.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR"],"ViewportBoundary"]\n29:I[897367,["/_next/static/chunks/0x.73w57rn4ou.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","/_next/static/chunks/0i.l9589uvx0j.js?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR"],"MetadataBoundary"]\n2a:"$Sreact.suspense"\n5:["$","span",null,{"className":"italic","style":{"color":"#c9a961"},"children":"0"}]\n6:["$","h1",null,{"className":"mt-6 max-w-xl font-serif text-3xl leading-[1.1] tracking-tight sm:text-4xl","style":{"color":"#0a1e3f"},"children":["This page seems to have"," ",["$","span",null,{"className":"italic","style":{"color":"#c9a961"},"children":"wandered off"}],"."]}]\n7:["$","p",null,{"className":"mt-6 max-w-md text-[15px] leading-relaxed","style":{"color":"rgba(10,30,63,0.7)"},"children":"The link may be broken or the page may have moved. Let's get you back to something that works."}]\n8:["$","div",null,{"className":"mt-12 flex flex-wrap items-center justify-center gap-4","children":[["$","$L15",null,{"href":"/","className":"inline-flex h-12 items-center gap-2 px-7 text-sm font-medium tracking-tight text-white transition-all hover:opacity-90","style":{"background":"#0a1e3f"},"children":["Back to home",["$","$L16",null,{"ref":"$undefined","iconNode":[["path",{"d":"M5 12h14","key":"1ays0h"}],["path",{"d":"m12 5 7 7-7 7","key":"xquz4c"}]],"className":"lucide-arrow-right size-4","style":{"color":"#c9a961"}}]]}],["$","$L15",null,{"href":"/articles","className":"inline-flex h-12 items-center gap-2 border px-7 text-sm font-medium tracking-tight transition-all hover:bg-white","style":{"borderColor":"rgba(10,30,63,0.25)","color":"#0a1e3f"},"children":"Read articles"}],["$","a",null,{"href":"mailto:elimark1611@gmail.com","className":"inline-flex h-12 items-center gap-2 px-2 text-sm font-medium tracking-tight transition-opacity hover:opacity-70","style":{"color":"#0a1e3f"},"children":["Email Pastor Eli",["$","$L16",null,{"ref":"$undefined","iconNode":[["path",{"d":"M7 7h10v10","key":"1tivn9"}],["path",{"d":"M7 17 17 7","key":"1vkiza"}]],"className":"lucide-arrow-up-right size-4","style":{"color":"#c9a961"}}]]}]]}]\n9:["$","$L17",null,{}]\na:["$","$L18",null,{}]\nb:["$","$L19",null,{}]\nc:["$","$L1a",null,{}]\nd:["$","$L1b",null,{}]\ne:["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}]\n"])m.css?dpl=dpl_7yCTtDr5seZUDPBpTPy5xDMC8PnR","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]\n"]) text-stone-800 underline underline-offset-4 decoration-stone-300 hover:decoration-stone-700","children":"Model Context Protocol"}]," ","server that lets an AI assistant edit a church's website by operating directly on its GitHub repository. Writes commit to the default branch and auto-deploy to production via Vercel in about 30 seconds. ",25,"tools, GitHub-OAuth scoped to the caller's own repositories."]}],["$","p",null,{"className":"mt-4 max-w-2xl text-sm text-stone-500","children":["Looking for the plain-English version?"," ",["$","$L15",null,{"href":"/guide","className":"font-medium text-stone-700 underline underline-offset-4 decoration-stone-300 hover:decoration-stone-700","children":"See the pastor's guide"}],"."]}],["$","section",null,{"id":"connection","className":"mt-14 scroll-mt-24","children":[["$","h2",null,{"className":"font-serif text-2xl tracking-tight text-stone-950 sm:text-[28px]","children":"Connection"}],["$","dl",null,{"className":"mt-5 grid grid-cols-1 gap-px overflow-hidden rounded-2xl border border-stone-200 bg-stone-200 sm:grid-cols-2","children":[["$","div",null,{"className":"bg-[#faf8f3] px-5 py-4","children":[["$","dt",null,{"className":"font-mono text-[11px] font-medium tracking-[0.12em] text-stone-500 uppercase","children":"Endpoint"}],["$","dd",null,{"className":"mt-1 break-words text-stone-900 font-mono text-sm","children":"https://www.elijahdesent.com/api/mcp"}]]}],["$","div",null,{"className":"bg-[#faf8f3] px-5 py-4","children":[["$","dt",null,{"className":"font-mono text-[11px] font-medium tracking-[0.12em] text-stone-500 uppercase","children":"Transport"}],["$","dd",null,{"className":"mt-1 break-words text-stone-900 text-base","children":"Streamable HTTP (stateless)"}]]}],["$","div",null,{"className":"bg-[#faf8f3] px-5 py-4","children":[["$","dt",null,{"className":"font-mono text-[11px] font-medium tracking-[0.12em] text-stone-500 uppercase","children":"Server"}],["$","dd",null,{"className":"mt-1 break-words text-stone-900 font-mono text-sm","children":"elijahdesent-crm v0.10.0"}]]}],["$","div",null,{"className":"bg-[#faf8f3] px-5 py-4","children":[["$","dt",null,{"className":"font-mono text-[11px] font-medium tracking-[0.12em] text-stone-500 uppercase","children":"Auth"}],["$","dd",null,{"className":"mt-1 break-words text-stone-900 text-base","children":"OAuth 2.1 — identity via GitHub"}]]}],["$","div",null,{"className":"bg-[#faf8f3] px-5 py-4","children":[["$","dt",null,{"className":"font-mono text-[11px] font-medium tracking-[0.12em] text-stone-500 uppercase","children":"Authorization metadata"}],["$","dd",null,{"className":"mt-1 break-words text-stone-900 font-mono text-sm","children":"/.well-known/oauth-authorization-server"}]]}],["$","div",null,{"className":"bg-[#faf8f3] px-5 py-4","children":[["$","dt",null,{"className":"font-mono text-[11px] font-medium tracking-[0.12em] text-stone-500 uppercase","children":"Protected-resource metadata"}],["$","dd",null,{"className":"mt-1 break-words text-stone-900 font-mono text-sm","children":"/.well-known/oauth-protected-resource"}]]}]]}],"$L2c","$L2d","$L2e","$L2f"]}],"$L30","$L31","$L32"]}]\n"]) }\n }\n}"}]}]\n2f:["$","p",null,{"className":"mt-3 text-sm text-stone-500","children":["Most clients (Claude, ChatGPT developer mode, Perplexity) add it through their connector UI instead — see the"," ",["$","$L15",null,{"href":"/connect","className":"font-medium text-stone-700 underline underline-offset-4 decoration-stone-300 hover:decoration-stone-700","children":"setup walkthrough"}],". On first connect, the client opens a GitHub sign-in to authorize."]}]\n"])","className":"font-medium text-stone-700 underline underline-offset-4 decoration-stone-300 hover:decoration-stone-700","children":"Pastor@elijahdesent.com"}]]}]\n"]).'. Goes live once nameservers propagate."}],["$","div",null,{"className":"mt-5 overflow-hidden rounded-xl border border-stone-200","children":["$","table",null,{"className":"w-full text-left text-sm","children":[["$","thead",null,{"children":["$","tr",null,{"className":"bg-stone-50 text-[11px] font-medium tracking-[0.1em] text-stone-500 uppercase","children":[["$","th",null,{"className":"px-4 py-2 font-mono","children":"Param"}],["$","th",null,{"className":"px-4 py-2 font-mono","children":"Type"}],["$","th",null,{"className":"px-4 py-2","children":"Description"}]]}]}],["$","tbody",null,{"className":"divide-y divide-stone-100","children":[["$","tr","domain",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"domain"}],["$","span",null,{"className":"ml-1.5 font-mono text-[10px] font-semibold text-amber-700","children":"req"}]]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Domain to connect, e.g. 'gracebaptist.org' or 'www.gracebaptist.org'."}]]}],["$","tr","repo",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"repo"}],false]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Which site, as 'owner/name' or 'name'. Needed only if the caller has multiple sites."}]]}]]}]]}]}],["$","p",null,{"className":"mt-4 text-sm text-stone-600","children":[["$","span",null,{"className":"font-mono text-[11px] font-medium tracking-[0.1em] text-stone-400 uppercase","children":"Returns "}],"Confirmation plus the Vercel nameservers to set at the registrar (from the Vercel API, e.g. ns1/ns2.vercel-dns.com), and an A/CNAME fallback."]}]]}]]}],["$","section","check_domain",{"id":"tool-check_domain","className":"scroll-mt-24 overflow-hidden rounded-2xl border border-stone-200 bg-white shadow-sm","children":[["$","div",null,{"className":"flex flex-wrap items-center gap-3 border-b border-stone-100 px-5 py-4 sm:px-6","children":["$L4f","$L50"]}],"$L51"]}],"$L52"]}]]}]\n"]) to disambiguate when they own more than one."}],["$","div",null,{"className":"mt-5 space-y-4","children":[["$","section","analytics_summary",{"id":"tool-analytics_summary","className":"scroll-mt-24 overflow-hidden rounded-2xl border border-stone-200 bg-white shadow-sm","children":[["$","div",null,{"className":"flex flex-wrap items-center gap-3 border-b border-stone-100 px-5 py-4 sm:px-6","children":[["$","code",null,{"className":"font-mono text-[15px] font-semibold text-stone-950","children":"analytics_summary"}],["$","span",null,{"className":"rounded-full px-2 py-0.5 font-mono text-[10px] font-semibold tracking-wide uppercase bg-stone-100 text-stone-600","children":"read"}]]}],["$","div",null,{"className":"px-5 py-5 sm:px-6","children":[["$","p",null,{"className":"text-base leading-relaxed text-stone-700","children":"High-level traffic over a recent window."}],["$","div",null,{"className":"mt-5 overflow-hidden rounded-xl border border-stone-200","children":["$","table",null,{"className":"w-full text-left text-sm","children":[["$","thead",null,{"children":["$","tr",null,{"className":"bg-stone-50 text-[11px] font-medium tracking-[0.1em] text-stone-500 uppercase","children":[["$","th",null,{"className":"px-4 py-2 font-mono","children":"Param"}],["$","th",null,{"className":"px-4 py-2 font-mono","children":"Type"}],["$","th",null,{"className":"px-4 py-2","children":"Description"}]]}]}],["$","tbody",null,{"className":"divide-y divide-stone-100","children":[["$","tr","church",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"church"}],false]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Church name or live domain."}]]}],["$","tr","days",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"days"}],false]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"integer"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Window in days, 1–90. Default 28."}]]}]]}]]}]}],["$","p",null,{"className":"mt-4 text-sm text-stone-600","children":[["$","span",null,{"className":"font-mono text-[11px] font-medium tracking-[0.1em] text-stone-400 uppercase","children":"Returns "}],"Total pageviews, unique visitors (devices), country \u0026 device breakdown."]}]]}]]}],["$","section","top_pages",{"id":"tool-top_pages","className":"scroll-mt-24 overflow-hidden rounded-2xl border border-stone-200 bg-white shadow-sm","children":[["$","div",null,{"className":"flex flex-wrap items-center gap-3 border-b border-stone-100 px-5 py-4 sm:px-6","children":[["$","code",null,{"className":"font-mono text-[15px] font-semibold text-stone-950","children":"top_pages"}],["$","span",null,{"className":"rounded-full px-2 py-0.5 font-mono text-[10px] font-semibold tracking-wide uppercase bg-stone-100 text-stone-600","children":"read"}]]}],["$","div",null,{"className":"px-5 py-5 sm:px-6","children":[["$","p",null,{"className":"text-base leading-relaxed text-stone-700","children":"Most-viewed pages over a recent window."}],["$","div",null,{"className":"mt-5 overflow-hidden rounded-xl border border-stone-200","children":["$","table",null,{"className":"w-full text-left text-sm","children":[["$","thead",null,{"children":["$","tr",null,{"className":"bg-stone-50 text-[11px] font-medium tracking-[0.1em] text-stone-500 uppercase","children":["$L53","$L54","$L55"]}]}],"$L56"]}]}],"$L57"]}]]}],"$L58","$L59"]}]]}]\n"]), returns a one-time upload link; small images commit to the repo, videos \u0026 large files route to hosted storage automatically."}],["$","div",null,{"className":"mt-5 overflow-hidden rounded-xl border border-stone-200","children":["$","table",null,{"className":"w-full text-left text-sm","children":[["$","thead",null,{"children":["$","tr",null,{"className":"bg-stone-50 text-[11px] font-medium tracking-[0.1em] text-stone-500 uppercase","children":[["$","th",null,{"className":"px-4 py-2 font-mono","children":"Param"}],["$","th",null,{"className":"px-4 py-2 font-mono","children":"Type"}],["$","th",null,{"className":"px-4 py-2","children":"Description"}]]}]}],["$","tbody",null,{"className":"divide-y divide-stone-100","children":[["$","tr","repo",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"repo"}],["$","span",null,{"className":"ml-1.5 font-mono text-[10px] font-semibold text-amber-700","children":"req"}]]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Repo as 'owner/name', or bare 'name' to use the caller's GitHub owner."}]]}],["$","tr","path",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"path"}],["$","span",null,{"className":"ml-1.5 font-mono text-[10px] font-semibold text-amber-700","children":"req"}]]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Save location. Use 'public/\u003cname\u003e.\u003cext\u003e' for site-served images."}]]}],["$","tr","message",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"message"}],["$","span",null,{"className":"ml-1.5 font-mono text-[10px] font-semibold text-amber-700","children":"req"}]]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Plain-English commit message."}]]}],["$","tr","data",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"data"}],false]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Advanced — base64 image bytes. Omit to get an upload link instead."}]]}],["$","tr","branch",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"branch"}],false]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],"$L5d"]}]]}]]}]}],"$L5e"]}]]}]\n"])) or the bare token."}]]}]]}]]}]}],["$","p",null,{"className":"mt-4 text-sm text-stone-600","children":[["$","span",null,{"className":"font-mono text-[11px] font-medium tracking-[0.1em] text-stone-400 uppercase","children":"Returns "}],"HOSTED (permanent storage URL), COMMITTED (live repo path), or PENDING (not uploaded yet)."]}]]}]]}]\n"]) px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"redirect_to"}],false]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Domain to send visitors to, e.g. 'gracebaptist.org'. Use 'none' (or omit) to turn the redirect off."}]]}],["$","tr","permanent",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"permanent"}],false]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"boolean"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Permanent (308) by default; false for a temporary 307."}]]}],["$","tr","repo",{"className":"align-top","children":[["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":[["$","code",null,{"className":"font-mono text-[13px] text-stone-900","children":"repo"}],false]}],["$","td",null,{"className":"whitespace-nowrap px-4 py-2.5","children":["$","code",null,{"className":"font-mono text-[13px] text-stone-500","children":"string"}]}],["$","td",null,{"className":"px-4 py-2.5 text-stone-600","children":"Which site, as 'owner/name' or 'name'. Needed only if the caller has multiple sites."}]]}]]}]]}]}],["$","p",null,{"className":"mt-4 text-sm text-stone-600","children":[["$","span",null,{"className":"font-mono text-[11px] font-medium tracking-[0.1em] text-stone-400 uppercase","children":"Returns "}],"Confirmation of the new redirect (or that the domain now serves directly). Reports the chaining error if the target is itself a redirect."]}]]}]]}]\n"]) is supplied."]}]\n"])

Server Config

{
  "mcpServers": {
    "custom-website-editor": {
      "type": "http",
      "url": "https://www.elijahdesent.com/api/mcp"
    }
  }
}
Recommend Servers
TraeBuild with Free GPT-4.1 & Claude 3.7. Fully MCP-Ready.
MCP AdvisorMCP Advisor & Installation - Use the right MCP server for your needs
EdgeOne Pages MCPAn MCP service designed for deploying HTML content to EdgeOne Pages and obtaining an accessible public URL.
Serper MCP ServerA Serper MCP Server
WindsurfThe new purpose-built IDE to harness magic
ChatWiseThe second fastest AI chatbot™
Tavily Mcp
BlenderBlenderMCP connects Blender to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control Blender. This integration enables prompt assisted 3D modeling, scene creation, and manipulation.
Zhipu Web SearchZhipu Web Search MCP Server is a search engine specifically designed for large models. It integrates four search engines, allowing users to flexibly compare and switch between them. Building upon the web crawling and ranking capabilities of traditional search engines, it enhances intent recognition capabilities, returning results more suitable for large model processing (such as webpage titles, URLs, summaries, site names, site icons, etc.). This helps AI applications achieve "dynamic knowledge acquisition" and "precise scenario adaptation" capabilities.
MiniMax MCPOfficial MiniMax Model Context Protocol (MCP) server that enables interaction with powerful Text to Speech, image generation and video generation APIs.
Y GuiA web-based graphical interface for AI chat interactions with support for multiple AI models and MCP (Model Context Protocol) servers.
CursorThe AI Code Editor
Howtocook Mcp基于Anduin2017 / HowToCook (程序员在家做饭指南)的mcp server,帮你推荐菜谱、规划膳食,解决“今天吃什么“的世纪难题; Based on Anduin2017/HowToCook (Programmer's Guide to Cooking at Home), MCP Server helps you recommend recipes, plan meals, and solve the century old problem of "what to eat today"
Jina AI MCP ToolsA Model Context Protocol (MCP) server that integrates with Jina AI Search Foundation APIs.
Visual Studio Code - Open Source ("Code - OSS")Visual Studio Code
RedisA Model Context Protocol server that provides access to Redis databases. This server enables LLMs to interact with Redis key-value stores through a set of standardized tools.
DeepChatYour AI Partner on Desktop
Playwright McpPlaywright MCP server
AiimagemultistyleA Model Context Protocol (MCP) server for image generation and manipulation using fal.ai's Stable Diffusion model.
Baidu Map百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Amap Maps高德地图官方 MCP Server